using System;

// 使用示例
class Example
{
    public static void UsageExample()
    {
        EventDispatcher dispatcher = new EventDispatcher();
        
        // 示例1：使用EventListenerManager自动管理
        using (var listenerManager = dispatcher.CreateListenerManager())
        {
            // 注册多个事件
            listenerManager.RegisterEvent<StringEventArgs>((args) =>
            {
                Console.WriteLine($"收到字符串事件: {args.Message}");
            });
            
            listenerManager.RegisterEvent<UserEventArgs>((args) =>
            {
                Console.WriteLine($"用户 {args.UserName} 执行了 {args.Action}");
            });
            
            listenerManager.RegisterEvent<LoginEventArgs>((args) =>
            {
                Console.WriteLine($"登录尝试: {args.Username}, 成功: {args.Success}");
            });
            
            // 触发事件
            dispatcher.DispatchEvent(new StringEventArgs("重要消息", 1, dispatcher));
            dispatcher.DispatchEvent(new UserEventArgs("123", "张三", "登录", dispatcher));
            dispatcher.DispatchEvent(new LoginEventArgs("zhangsan", "password123", true, dispatcher));
            
            // 自动清理（using语句结束时）
        }
        
        // 示例2：手动管理
        var manager = dispatcher.CreateListenerManager();
        
        manager.RegisterEvent<StringEventArgs>((args) =>
        {
            Console.WriteLine($"手动管理: {args.Message}");
        });
        
        dispatcher.DispatchEvent(new StringEventArgs("测试消息", 0, dispatcher));
        
        // 手动清理
        manager.Dispose();
    }
}